iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Mobile Development

Android studio 30天初學筆記系列 第 19

[Android Studio 30天挑戰] Day19 - 介紹RxJava2(上)

  • 分享至 

  • xImage
  •  

RxJava2是一套處理非同步(asynchronous)事件的library。Android開發經常會用到非同步(asynchronous)機制,像是網路連線、資料庫存取和其他耗時的工作,而RxJava2可以大量簡化這些繁瑣的過程,只要一行程式就能在background和UI thread之間切換。而RxJava是基於觀察者的模式來設計的。

Observable(被觀察者)/Observer(觀察者)

在RxJava中,有發送資料流程然後終止資料流程的Observable物件,以及訂閱Observable的Observer物件。
Observer訂閱的Observable發送值、錯誤、或完成信號後,Observer會接收到通知。

RxJava2優點

1.方便的處理線程切換的問題。
2.當邏輯代碼越來越複雜,RxJava2仍可保持可讀性。

依賴

一樣的請到build.grade(Module: app)的dependencies加入依賴。

dependencies{
    implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
    implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
}

範例

這次的範例是來觀察Retorfit接收資料,因為Retorfit講解過了我就跳過了。
但在建立Retrofit記得要加上下面第四行,才能跟Retorfit連動。

retrofit2.Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//設定RxJava2。
                .build();

Observable(被觀察者)

這邊找到我們要觀察的對象,並把它設為被觀察者。

public interface ApiService {
    @GET("posts/1")
    Observable<post> getpost();
}

創建Observer(觀察者)

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //new出實例
        ApiClient apiClient=new ApiClient();
        //呼.getpost()的方法,並建立RxJava。
        apiClient.getApiService().getpost()
                .subscribeOn(Schedulers.io())//subscribe() 這個方法所在的線程
                .observeOn(AndroidSchedulers.mainThread())//Subscriber 回調所運行在的線程
                .subscribe(new Observer<post>() {
                     //在訂閱後發送數據之前,會首先調用。
                    // Disposable可用於取消訂閱。
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("Note", "獲取 subscribe");
                    }
                    //處理的事件。
                    @Override
                    public void onNext(post post) {
                        Log.e("Note", post.getId());
                        Log.e("Note", post.getUserId());
                        Log.e("Note", post.getTitle());
                        Log.e("Note", post.getBody());
                    }
                    //事件處理過程中出現異常情況時。
                    @Override
                    public void onError(Throwable e) {
                        Log.e("Note", "獲取失敗");
                    }
                    //事件處理完成。
                    @Override
                    public void onComplete() {
                        Log.e("Note", "獲取完成");
                    }
                });
    }
}

上一篇
[Android Studio 30天挑戰] Day018- 介紹okhttp
下一篇
[Android Studio 30天挑戰] Day20 - 介紹RxJava2(下)
系列文
Android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言